<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
class ConfigController extends Controller
{

    /**
     * 静态方法进行权限判断
     * 
     * @param         string               判断操作管理是否关闭
     * @param         string               判断管理员权限是否开启*/
    static public function func($operation_name,$role_func){
        // 进行session判断操作管理是否关闭,管理员权限是否开启，如果违法操作则返回
        if(session($operation_name) == 2 || empty(strstr(session('role_func'),$role_func))){
                return true;
        }
    }


    /**
     * 文件上传方法
     *
     * @return    string     $temp_name     随机文件名
     */
    public function picInfo(Request $request)
    {
        if($request -> hasFile('pic')){
            // 获取文件后缀名
            $hz = $request -> file('pic') -> getClientOriginalExtension();
            // 随机后缀名,并拼接文件后缀名
            $temp_name = md5(time().rand(100000,999999)).'.'.$hz;
            // 将文件上传至指定位置
            $request -> file('pic') -> move('./images/admin/config_logo',$temp_name);
            
        }
        return $temp_name;

    }

    /*********************************************************
     * 网站配置修改
     * 
     * @param    int     $id     接收要修改的ID
     * @param    array   $data   单条查询内容
     * @return   修改模板
     */
    public function getWeb()
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('网站信息配置','config_web')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        // 查询要修改的内容
        $data = DB::table('config')->first();
        return view('/admin/config/web',['title'=>'网站配置','data'=>$data]);
    }

    /** 
     * 执行网站配置修改
     * 
     * */
    public function postDoweb(Request $request)
    {   
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('网站信息配置','config_web')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        $id = $request -> only(['id']);
        // 获取除_token pic id 之外的值
        $data = $request -> except(['_token','pic','id']);
        // 检测是否有文件上传,有的话执行上传方法,没有的话调用数据库的pic值
        if($request -> hasFile('pic')){
            $temp_name = $this->picInfo($request);
        }else{
            $temp_name = DB::table('config') -> value('config_logo');
        }
        // 将pic值 压入数组
        $data['config_logo'] = $temp_name;
        $res = DB::table('config') -> where('id',$id) -> update($data);
        if($res){
            return redirect('/admin/config/web') -> with('success','网站配置修改成功');;
        }else{
            return back() -> with('error','网站配置修改失败');;
        }
    }

    /*********************************************************
     * 公司信息修改
     * 
     * @param    int     $id     接收要修改的ID
     * @param    array   $data   单条查询内容
     * @return   修改模板
     */
    public function getFirm()
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('公司信息配置','config_firm')){
            return back() ->  with('error','违法操作,禁止访问');
        }        
        // 查询要修改的内容
        $data = DB::table('firm')->first();
        return view('/admin/config/firm',['title'=>'公司信息设置','data'=>$data]);
    }

    /** 
     * 执行公司信息修改
     *
     * @param     int      $id      获取firm路由传参
     * @param     array    $data    获取除data之外的参数 
     * */
    public function postDofirm(Request $request)
    {   
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('公司信息配置','config_firm')){
            return back() ->  with('error','违法操作,禁止访问');
        }      
        $id = $request -> input('id');
        // 获取除_token pic id 之外的值
        $data = $request -> except(['_token','id']);
        $res = DB::table('firm') -> where('id',$id) -> update($data);
        if($res){
            return redirect('/admin/config/firm') -> with('success','修改成功');
        }else{
            return back() ->with('error','公司信息修改失败');
        }
    }


    /*********************************************************
     * 系统信息显示
     * 
     * @return   系统信息模板
     */
    public function getSystem()
    {
        return view('/admin/config/system',['title'=>'系统信息显示']);
    }


    /**********************************************************
     * 数据库备份列表
     * 
     * @param    array    $data    数据库查询内容
     * @param    string   $search  搜索内容
     * @param    int      $count   分页条数
     * @return   友情链接列表模板
     */
    public function getDatalist(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('数据库备份','config_datas')){
            return back() ->  with('error','违法操作,禁止访问');
        }      
        $count = $request -> input('count','10');
        $search = $request -> input('search','');
        $data = DB::table('datas') -> where('data_time','like','%'.$search.'%') -> orderBy('id', 'desc') -> paginate($count);
        $cou = DB::table('datas')->count();
        return view('admin.config.datalist',['title'=>'数据库备份','data'=>$data,'request'=>$request->all(),'cou'=>$cou]);
    }

    /**
     * 数据库备份
     * 
     * @return    返回备份模板
     */
    public function getData()
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('数据库备份','config_datas')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        return view('/admin/config/data',['title'=>'数据库备份']);
    }


    /**
     * 执行数据库备份
     * 
     * @param          array         $data         查询post提交的备份条件
     * @param          string        $tablename    数据库库名
     * @param          string        $filename     sql文件名
     * @param          string        $tmpFile      存储路径
     * @param          object        $file         打开文件，只读模式
     * @return 返回数据库备份模板，并提示结果
     */
    public function postDodata(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('数据库备份','config_datas')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        $data = $request -> except(['_token']);
        // 设置SQL文件名
        $filename=$data['data_time']."-".$data['databases'].".sql"; 
        $data['file_name'] = $filename;
        $tmpFile = $data['data_path'].$filename;
        // 用MySQLDump命令导出数据库 
        exec("D:/wamp/bin/mysql/mysql5.7.11/bin/mysqldump -h localhost -u".$data['data_name']." -p".$data['data_pass']." ".$data['databases']." > ".$tmpFile,$b);

        // $file = fopen($tmpFile, "r"); -----   打开文件，暂不需要 
        // 判断文件的字节是否为0
        if(filesize($tmpFile) == 0){
            $data['data_status'] = 2;
            DB::table('datas') -> insert($data);  
            return back() -> with('error','数据库备份失败');
        }else{
            // 读取文件，并关闭    ----------         暂不需要
            // $str = fread($file,filesize($tmpFile));         
            // fclose($file);   
            $data['data_status'] = 1;
            DB::table('datas') -> insert($data);  
            return redirect('/admin/config/datalist') -> with('success','数据库备份成功'); 
        }
    }

    /**
     * 数据库记录删除
     * 
     * @param    int     $id    要删除的id值
     * @param    bool    $res   执行true or flase
     * @param    array   $id    获取单个删除的id值
     * @return   返回模板
     */
    public function getDatedel(Request $request,$id = '')
    {
        if($id || $id = $request -> input('id')){
            $data = DB::table('datas') -> whereIn('id',$id) -> first();
            // 删除文件
            unlink($data['data_path'].$data['file_name']);
            $res = DB::table('datas') -> whereIn('id',$id) -> delete();
            if($res){
                return redirect('/admin/config/datalist') -> with('success','数据库备份记录删除成功');
            }else{
                return back() -> with('error','数据库备份记录删除失败');
            }
        }

    }

}
